1 /* 2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021 3 License: [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License]. 4 Authors: Marcelo S. N. Mancini 5 6 Copyright Marcelo S. N. Mancini 2018 - 2021. 7 Distributed under the CC BY-4.0 License. 8 (See accompanying file LICENSE.txt or copy at 9 https://creativecommons.org/licenses/by/4.0/ 10 */ 11 module hip.audio.backend.openal.clip; 12 13 version(OpenAL): 14 import hip.audio_decoding.audio; 15 import hip.audio; 16 import hip.audio.audiosource; 17 import hip.audio.backend.openal.player; 18 import hip.audio.backend.openal.al_err; 19 import hip.audio.clip; 20 import bindbc.openal; 21 22 /** 23 * OpenAL Buffer works in the following way: 24 * If the buffer is streamed, it won't be owned by any source, so it will have total control 25 * over itself. That way, it can be reused by any source. 26 * 27 * Else, the buffer will be owned by the source for decoding, updating, and pulling data. 28 * 29 */ 30 public class HipOpenALClip : HipAudioClip 31 { 32 this(IHipAudioDecoder decoder, HipAudioClipHint hint){super(decoder, hint);} 33 this(IHipAudioDecoder decoder, HipAudioClipHint hint, uint chunkSize){super(decoder, hint, chunkSize);} 34 35 override void onUpdateStream(ubyte[] data, uint decodedSize){} 36 37 /** Allocates ALuint in the bufferwrapper */ 38 override HipAudioBufferWrapper createBuffer(ubyte[] data) 39 { 40 // import hip.console.log; 41 HipAudioBufferWrapper w; 42 alGenBuffers(1, &w.buffer.al); 43 alCheckError("Error generating OpenAL Buffer"); 44 hasBuffer = true; 45 return w; 46 } 47 48 override void destroyBuffer(HipAudioBuffer* buffer) 49 { 50 alDeleteBuffers(1, &buffer.al); 51 alCheckError("Error deleting OpenAL Buffer"); 52 } 53 54 override void setBufferData(HipAudioBuffer* buffer, ubyte[] data, uint size = 0) 55 { 56 alBufferData( 57 buffer.al, 58 HipOpenALAudioPlayer.config.getFormatAsOpenAL, 59 data.ptr, 60 size == 0 ? cast(int)data.length : size, 61 decoder.getSamplerate() 62 ); 63 alCheckError("Error setting OpenAL Buffer Data"); 64 } 65 66 bool hasBuffer; 67 68 }